/**
 * 
 */
package cn.dgfy.MyBatisStudy.handler;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.apache.ibatis.type.JdbcType;
import org.apache.ibatis.type.TypeHandler;

import cn.dgfy.MyBatisStudy.bean.Sex;

/**
 * @author Tearfalls
 * 通过实现TypeHandler接口来自定义一个TypeHandler来处理枚举类型Sex的数据
 * 可以通过对类使用@MappedTypes注解来指定此类型处理器要处理的Java类型，也可以在全局配置中注册此类型处理器时通过javaType属性指定，或在
 * Mapper文件中指定此类型处理器的位置通过javaType属性指定要处理的Java类型
 */
public class SexEnumTypeHandler implements TypeHandler<Sex> {

	/*
	 * MyBatis向PreparedStatement设置参数时调用此方法
	 */
	@Override
	public void setParameter(PreparedStatement ps, int i, Sex parameter, JdbcType jdbcType) throws SQLException {
		ps.setInt(i, parameter.getCode());
	}

	/*
	 * 从结果集得到列值并进行封装的过程中调用此方法得到自定义Java类型的对象
	 */
	@Override
	public Sex getResult(ResultSet rs, String columnName) throws SQLException {
		return Sex.getSexByCode(rs.getInt(columnName));
	}

	/*
	 * 从结果集得到列值并进行封装的过程中调用此方法得到自定义Java类型的对象
	 */
	@Override
	public Sex getResult(ResultSet rs, int columnIndex) throws SQLException {
		return Sex.getSexByCode(rs.getInt(columnIndex));
	}

	/*
	 * 从调用存储过程的执行结果得到列值并进行封装的过程中调用此方法得到自定义Java类型的对象
	 */
	@Override
	public Sex getResult(CallableStatement cs, int columnIndex) throws SQLException {
		return Sex.getSexByCode(cs.getInt(columnIndex));
	}
	
}
